home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Moscow ML 1.31 / source code / mosml / src / mosmllib / test / substring.sml < prev    next >
Encoding:
Text File  |  1996-07-03  |  10.7 KB  |  330 lines  |  [TEXT/R*ch]

  1. (* test/substring.sml 1995-04-27, 1995-06-14 *)
  2.  
  3. use "auxil.sml";
  4.  
  5. local 
  6.     open Char Substring
  7.     fun base2 (a, b) = (base a, base b)
  8.  
  9.     val s1 = ""                (* String.size s1 =  0 *)
  10.     and s2 = "ABCDE\tFGHI";        (* String.size s2 = 10 *)
  11.     val ss1 = all s1            (* size s1 =  0 *)
  12.     and ss2 = all s2;            (* size s2 = 10 *)
  13.  
  14.     val sa = "AAAAaAbAABBBB";        (* String.size sa = 14 *)
  15.     (*            45678      *)
  16.  
  17.     val ssa1 = extract(sa, 4, SOME 0)    (* size ssa1 = 0 *)
  18.     val ssa2 = extract(sa, 4, SOME 5)    (* size ssa2 = 5 *)
  19.  
  20.     val ss3 = extract("junk this is a   (clear)textjunk", 4, SOME 24);
  21.     (*                       456789012345678901234567        *)
  22.  
  23. in
  24.  
  25.  
  26. val test1a = 
  27.     check'(fn _ => 
  28.        (s2, 10, 0) = base(extract(s2, 10, SOME 0))
  29.        andalso (s2, 10, 0) = base(extract(s2, 10, NONE))
  30.        andalso (s2, 0,  0) = base(extract(s2, 0, SOME 0))
  31.        andalso (s2, 4,  3) = base(extract(s2, 4, SOME 3))
  32.        andalso (s2, 4,  6) = base(extract(s2, 4, SOME 6))
  33.        andalso (s2, 4,  6) = base(extract(s2, 4, NONE))
  34.        andalso (s2, 0, 10) = base(extract(s2, 0, SOME 10))
  35.        andalso (s2, 0, 10) = base(extract(s2, 0, NONE)));
  36.  
  37. val test1b = (extract(s2, ~1, SOME 0) seq "WRONG") 
  38.               handle Subscript => "OK" | _ => "WRONG";
  39. val test1c = (extract(s2, 11, SOME 0) seq "WRONG") 
  40.               handle Subscript => "OK" | _ => "WRONG";
  41. val test1d = (extract(s2, 0, SOME 11) seq "WRONG") 
  42.               handle Subscript => "OK" | _ => "WRONG";
  43. val test1e = (extract(s2, 10, SOME 1) seq "WRONG") 
  44.               handle Subscript => "OK" | _ => "WRONG";
  45. val test1f = (extract(s2, ~1, NONE) seq "WRONG") 
  46.               handle Subscript => "OK" | _ => "WRONG";
  47. val test1g = (extract(s2, 11, NONE) seq "WRONG") 
  48.               handle Subscript => "OK" | _ => "WRONG";
  49.  
  50. val test1h =
  51.     check'(fn _ =>
  52.        string ssa1 = ""
  53.        andalso string ssa2 = "aAbAA"
  54.        andalso s1 = string (all s1) 
  55.        andalso s2 = string (all s2));
  56.  
  57. val test2a = 
  58.     check'(fn _ => 
  59.        string(triml 6 ss2) = "FGHI"
  60.        andalso s2 = string(triml 0 ss2)
  61.        andalso s1 = string(triml 0 ss1)
  62.        andalso (s2, 10, 0) = base(triml 10 ss2)
  63.        andalso (s2, 10, 0) = base(triml 11 ss2)
  64.        andalso (sa, 6, 3) = base(triml 2 ssa2)
  65.        andalso (sa, 9, 0) = base(triml 5 ssa2)
  66.        andalso (sa, 9, 0) = base(triml 6 ssa2));
  67.  
  68. val test2b = (triml ~1 ss2 seq "WRONG") 
  69.              handle Subscript => "OK" | _ => "WRONG";
  70. val test2c = (triml ~1 ssa2 seq "WRONG") 
  71.              handle Subscript => "OK" | _ => "WRONG";
  72.  
  73. val test3a = 
  74.     check'(fn _ => 
  75.        string(trimr 6 ss2) = "ABCD"
  76.        andalso s2 = string(trimr 0 ss2)
  77.        andalso s1 = string(trimr 0 ss1)
  78.        andalso (s2, 0, 0) = base(trimr 10 ss2)
  79.        andalso (s2, 0, 0) = base(trimr 11 ss2)
  80.        andalso (sa, 4, 3) = base(trimr 2 ssa2)
  81.        andalso (sa, 4, 0) = base(trimr 5 ssa2)
  82.        andalso (sa, 4, 0) = base(trimr 6 ssa2));
  83.  
  84. val test3b = (trimr ~1 ss2 seq "WRONG") 
  85.              handle Subscript => "OK" | _ => "WRONG";
  86. val test3c = (trimr ~1 ssa2 seq "WRONG") 
  87.              handle Subscript => "OK" | _ => "WRONG";
  88.  
  89. val test4 = 
  90.     check'(fn _ => 
  91.        isEmpty ss1 
  92.        andalso not (isEmpty ss2)
  93.        andalso isEmpty ssa1
  94.        andalso not (isEmpty ssa2));
  95.  
  96. val test5a = 
  97.     check'(fn _ =>
  98.        case getc ssa1 of NONE => true | _ => false);
  99.  
  100. val test5b = 
  101.     check'(fn _ =>
  102.        case getc ssa2 of
  103.            NONE             => false 
  104.          | SOME(#"a", rest) => "AbAA" = string rest
  105.          | _                => false);
  106.  
  107. val test6 = 
  108.     check'(fn _ =>
  109.        first ssa1 = NONE
  110.        andalso first ssa2 = SOME #"a")
  111.  
  112. val test7 = 
  113.     check'(fn _ => (size ss1 = 0 andalso size ss2 = 10
  114.             andalso size ssa1 = 0 andalso size ssa2 = 5));
  115.  
  116. val test8a = 
  117.     check'(fn _ => (sub(ss2,6) = chr 70 andalso sub(ss2,9) = chr 73
  118.             andalso sub(ssa2, 1) = chr 65));
  119. val test8b = 
  120.     (sub(ss1, 0)  seq "WRONG") handle Subscript => "OK" | _ => "WRONG";
  121. val test8c = 
  122.     (sub(ss2, ~1) seq "WRONG") handle Subscript => "OK" | _ => "WRONG";
  123. val test8d = 
  124.     (sub(ss2, 10) seq "WRONG") handle Subscript => "OK" | _ => "WRONG";
  125. val test8e = 
  126.     (sub(ssa2, ~1) seq "WRONG") handle Subscript => "OK" | _ => "WRONG";
  127. val test8f = 
  128.     (sub(ssa2, 5) seq "WRONG") handle Subscript => "OK" | _ => "WRONG";
  129.  
  130. val test9a = 
  131.     check'(fn _ => 
  132.        base ss2 = base(slice(ss2, 0, SOME (size ss2)))
  133.        andalso base ss2 = base(slice(ss2, 0, NONE))
  134.        andalso (s2, 10, 0) = base(slice(ss2, size ss2, SOME 0))
  135.        andalso (s2, 10, 0) = base(slice(ss2, size ss2, NONE))
  136.        andalso base ss1 = base(slice(ss1, 0, SOME 0))
  137.        andalso base ss1 = base(slice(ss1, 0, NONE)));
  138.  
  139. val test9b = 
  140.     check'(fn _ => 
  141.                (sa, 4, 5) = base(slice(ssa2, 0, SOME 5))
  142.        andalso (sa, 4, 5) = base(slice(ssa2, 0, NONE))
  143.        andalso (sa, 4, 0) = base(slice(ssa2, 0, SOME 0))
  144.        andalso (sa, 9, 0) = base(slice(ssa2, 5, SOME 0))
  145.        andalso (sa, 9, 0) = base(slice(ssa2, 5, NONE))
  146.        andalso (sa, 5, 3) = base(slice(ssa2, 1, SOME 3))
  147.        andalso (sa, 5, 4) = base(slice(ssa2, 1, SOME 4))
  148.        andalso (sa, 5, 4) = base(slice(ssa2, 1, NONE)));
  149.  
  150. val test9c = (slice(ssa2, ~1, SOME 0) seq "WRONG") 
  151.               handle Subscript => "OK" | _ => "WRONG";
  152. val test9d = (slice(ssa2, 6, SOME 0) seq "WRONG") 
  153.               handle Subscript => "OK" | _ => "WRONG";
  154. val test9e = (slice(ssa2, 0, SOME 6) seq "WRONG") 
  155.               handle Subscript => "OK" | _ => "WRONG";
  156. val test9f = (slice(ssa2, 5, SOME 1) seq "WRONG") 
  157.               handle Subscript => "OK" | _ => "WRONG";
  158. val test9g = (slice(ssa2, ~1, NONE) seq "WRONG") 
  159.               handle Subscript => "OK" | _ => "WRONG";
  160. val test9h = (slice(ssa2, 6, NONE) seq "WRONG") 
  161.               handle Subscript => "OK" | _ => "WRONG";
  162.  
  163. val test12 =
  164.     check'(fn _ => 
  165.        concat [] = ""
  166.        andalso concat [ssa1, ssa1, ssa1] = ""
  167.        andalso concat [ssa2, ssa2, ssa2] = "aAbAAaAbAAaAbAA"
  168.        andalso concat [ssa2, ssa1, ss2, ss1] = "aAbAAABCDE\tFGHI");
  169.  
  170. val test13 = 
  171.     check'(fn _ => 
  172.        explode ss1 = []
  173.        andalso explode ssa1 = []
  174.        andalso explode ssa2 = [#"a", #"A", #"b", #"A", #"A"]);
  175.  
  176. val test14 = 
  177.     check'(fn _ => 
  178.        EQUAL = compare(ssa1,ssa1) andalso EQUAL = compare(ssa2,ssa2)
  179.        andalso LESS = compare(triml 1 ssa2, ssa2)
  180.        andalso GREATER = compare(ssa2, triml 1 ssa2)
  181.        andalso LESS = compare(trimr 1 ssa2, ssa2)
  182.        andalso GREATER = compare(ssa2, trimr 1 ssa2)
  183.        andalso LESS = compare(all "AB", ssa2)
  184.        andalso GREATER = compare(ssa2, all "AB"));
  185.  
  186. fun finda c = c <> #"A";
  187. fun findb c = c <> #"B";
  188.  
  189. val test15 = 
  190.     check'(fn _ =>
  191.        (sa, 5, 4) = base(dropl finda ssa2)
  192.        andalso (sa, 9, 0) = base(dropl findb ssa2)
  193.        andalso base ssa1 = base(dropl finda ssa1));
  194.  
  195. val test16 = 
  196.     check'(fn _ =>
  197.        (sa, 4, 5) = base(dropr finda ssa2)
  198.        andalso (sa, 4, 0) = base(dropr findb ssa2)
  199.        andalso base ssa1 = base(dropr finda ssa1));
  200.  
  201. val test17 = 
  202.     check'(fn _ =>
  203.        (sa, 4, 1) = base(takel finda ssa2)
  204.        andalso (sa, 4, 5) = base(takel findb ssa2)
  205.        andalso base ssa1 = base(takel finda ssa1));
  206.     
  207. val test18 = 
  208.     check'(fn _ =>
  209.        (sa, 9, 0) = base(taker finda ssa2)
  210.        andalso (sa, 4, 5) = base(taker findb ssa2)
  211.        andalso base ssa1 = base(taker finda ssa1));
  212.  
  213. val test19 =
  214.     check'(fn _ => 
  215.        ((sa, 4, 1), (sa, 5, 4)) = base2(splitl finda ssa2)
  216.        andalso ((sa, 4, 5), (sa, 9, 0)) = base2(splitl findb ssa2)
  217.        andalso base2(ssa1, ssa1) = base2(splitl finda ssa1));
  218.  
  219. val test20 =
  220.     check'(fn _ => 
  221.        ((sa, 4, 5), (sa, 9, 0)) = base2(splitr finda ssa2)
  222.        andalso ((sa, 4, 0), (sa, 4, 5)) = base2(splitr findb ssa2)
  223.        andalso base2(ssa1, ssa1) = base2 (splitr finda ssa1));
  224.  
  225. val test21 = 
  226.     check'(fn _ => 
  227.        (sa, 4, 5) = base(position "" ssa2)
  228.        andalso (sa, 5, 4) = base(position "Ab" ssa2)
  229.        andalso (sa, 9, 0) = base(position "B" ssa2)
  230.        andalso (sa, 9, 0) = base(position "AAB" ssa2)
  231.        andalso (sa, 4, 5) = base(position "aA" ssa2)
  232.        andalso (sa, 6, 3) = base(position "bAA" ssa2)
  233.        andalso base ssa1 = base(position "A" ssa1)
  234.        andalso base ssa1 = base(position "" ssa1));
  235.  
  236. val test22a = 
  237.     check'(fn _ => 
  238.        (translate (fn _ => "") ssa2 = ""
  239.         andalso translate (fn x => str x) ssa1 = ""
  240.         andalso translate (fn x => str x) ssa2 = string ssa2));
  241.  
  242. val test22b = 
  243.     check'(fn _ => 
  244.        (translate (fn c => if c = #"b" then "XYZ " else str c) ssa2
  245.                   = "aAXYZ AA"));
  246.  
  247. val test23 = 
  248.     check'(fn _ => 
  249.        (null(tokens isSpace ssa1)
  250.         andalso null(tokens (Char.contains "Aab") ssa2)
  251.         andalso map string (tokens (fn c => c = #"A") ssa2) = ["a","b"]));
  252.  
  253. val test24 = 
  254.     check'(fn _ => 
  255.        (map base (fields isSpace ssa1) = [base ssa1]
  256.         andalso map base (fields (contains "Aab") ssa2)
  257.                 = [(sa,4,0),(sa,5,0),(sa,6,0),(sa,7,0),(sa,8,0),(sa,9,0)]
  258.         andalso map string (fields (fn c => c = #"A") ssa2) 
  259.                 = ["a","b","",""]));
  260.  
  261. val test25 = 
  262.     check'(fn _ => 
  263.        null(tokens (fn _ => true) ss3)
  264.        andalso null(tokens (fn _ => false) (all ""))
  265.        andalso null(tokens (contains " ()") (all "(()())(( ()"))
  266.        andalso ["this","is","a","clear","text"] = 
  267.                            map string (tokens (contains " ()") ss3));
  268.  
  269. local 
  270.     val v = ref 0
  271.     fun setv c = v := ord c;
  272. in 
  273.     
  274. val test26a = 
  275.     check'(fn _ => 
  276.        (v := 0;
  277.         foldl (fn (x, _) => setv x) () ssa2;
  278.         !v = 65));
  279.  
  280. val test26b = 
  281.     check'(fn _ => 
  282.        implode(foldl (op ::) [] ssa2) = "AAbAa");
  283.  
  284. val test27a = 
  285.     check'(fn _ => 
  286.        (v := 0;
  287.        foldr (fn (x, _) => setv x) () ssa2;
  288.        !v = 97));
  289.  
  290. val test27b = 
  291.     check'(fn _ => 
  292.        implode(foldr (op ::) [] ssa2) = "aAbAA");
  293.  
  294. val test28 = 
  295.     check'(fn _ => 
  296.        (v := 0;
  297.         app setv ssa2;
  298.         !v = 65));
  299. end
  300.  
  301. val test29a = 
  302.     check'(fn _ =>
  303.        base2(splitAt(ssa1, 0)) = ((sa, 4, 0), (sa, 4, 0))
  304.        andalso base2(splitAt(ssa2, 0)) = ((sa, 4, 0), (sa, 4, 5))
  305.        andalso base2(splitAt(ssa2, 1)) = ((sa, 4, 1), (sa, 5, 4))
  306.        andalso base2(splitAt(ssa2, 4)) = ((sa, 4, 4), (sa, 8, 1))
  307.        andalso base2(splitAt(ssa2, 5)) = ((sa, 4, 5), (sa, 9, 0)));
  308. val test29b = (splitAt(ssa2, ~1) seq "WRONG")
  309.               handle Subscript => "OK" | _ => "WRONG";
  310. val test29c = (splitAt(ssa2, 6) seq "WRONG")
  311.               handle Subscript => "OK" | _ => "WRONG";
  312.  
  313. val test30a = 
  314.     check'(fn _ => 
  315.        (s2, 10, 0) = base(substring(s2, 10, 0))
  316.        andalso (s2, 0,  0) = base(substring(s2, 0, 0))
  317.        andalso (s2, 4,  3) = base(substring(s2, 4, 3))
  318.        andalso (s2, 4,  6) = base(substring(s2, 4, 6))
  319.        andalso (s2, 0, 10) = base(substring(s2, 0, 10)));
  320.  
  321. val test30b = (substring(s2, ~1, 0) seq "WRONG") 
  322.               handle Subscript => "OK" | _ => "WRONG";
  323. val test30c = (substring(s2, 11, 0) seq "WRONG") 
  324.               handle Subscript => "OK" | _ => "WRONG";
  325. val test30d = (substring(s2, 0, 11) seq "WRONG") 
  326.               handle Subscript => "OK" | _ => "WRONG";
  327. val test30e = (substring(s2, 10, 1) seq "WRONG") 
  328.               handle Subscript => "OK" | _ => "WRONG";
  329. end; 
  330.